#ifndef MY_STL_TYPE_TRAITS_H
#define MY_STL_TYPE_TRAITS_H

#include <type_traits>

namespace my_stl
{

    // 帮助结构体bool的重构
    template <typename T, T v>
    struct m_integral_constant
    {
        static constexpr T value = v;
    };

    // m_integral_constant类型特化(bool类型) 类型别名模板
    template <bool b>
    using m_bool_constant = m_integral_constant<bool, b>;

    // m_true_type 和 m_false_type 类型别名，分别表示真和假
    using m_true_type = m_bool_constant<true>;
    using m_false_type = m_bool_constant<false>;
    /*===============================================================*/
    // 类型萃取
    // is_pair

    // 前向声明pair
    template <typename T1, typename T2>
    struct pair;

    // 修改is_pair的定义
    template <typename T>
    struct is_pair : m_false_type
    {
    };

    // 特化版本
    template <typename T1, typename T2>
    struct is_pair<pair<T1, T2>> : m_true_type
    {
    };
} // namespace my_stl
#endif